import dayjs from 'dayjs';
// fillYear：年份小于当前年份时，是否补齐
export function formatDate(date, format = 'YYYY-MM-DD', fillYear = false) {
  if (date === null || typeof date === 'undefined') {
    return '--';
  }
  let cvtDate = date;
  if (Array.isArray(date)) {
    const [year, month, day] = date;
    cvtDate = new Date(year, month - 1, day);
  } else if (/^\d{8}$/.test(date)) { // Number类型，dayjs认为是时间戳
    cvtDate = `${date}`;
  }
  if (format === 'timestamp') {
    return dayjs(cvtDate).valueOf();
  }

  const year = Number(dayjs(cvtDate).format('YYYY'));
  if (year !== new Date().getFullYear() && format === 'MM-DD' && fillYear) {
    format = 'YYYY-MM-DD';
  }
  return dayjs(cvtDate).format(format);
}

export function fixedNumber(value, fixed = 2) {
  if (value === null || typeof value === 'undefined') {
    return '--';
  }
  if (typeof value === 'string') {
    value = Number(value);
  }
  let value2 = value.toFixed(fixed);
  return value2 += /%$/.test(value2) ? '%' : '';
}

export function formatZdf(value, fixed = 2, withPlus = true) {
  if (value === null || typeof value === 'undefined') {
    return '--';
  }
  value = fixedNumber(value, fixed);
  if (value > 0) {
    return `${withPlus ? '+' : ''}${value}%`;
  }

  return `${value}%`;
}

export function formatPercent(value) {
  if (value === null || typeof value === 'undefined') {
    return '--';
  }

  value = fixedNumber(value * 100);
  return `${value}%`;
}

export function formatMoneyUnit(value, withUnit = true) {
  if (value === null || typeof value === 'undefined') {
    return '--';
  }

  if (value >= 1e8) {
    return `${fixedNumber(value / 100000000)}${withUnit ? '亿元' : ''}`;
  } if (value >= 1e4) {
    return `${fixedNumber(value / 10000)}${withUnit ? '万元' : ''}`;
  }
  return `${fixedNumber(value)}${withUnit ? '元' : ''}`;
}

// 获取基金历史业绩指标周期名称
export function getFundNvPerformanceName(indexCycle) {
  const indexCycleMap = {
    7: '近1周',
    1: '近1月',
    3: '近3月',
    6: '近6月',
    12: '近1年',
    24: '近2年',
    36: '近3年',
    60: '近5年',
    998: '今年来',
    999: '成立以来'
  };
  return indexCycleMap[indexCycle] || '--';
}

// 获取基金资产配置分布名称
export function getFundAssetAllocationName(assetType, isQDIIFund = false) {
  let assetTypeMap = {
    rIAOfBond: '债券',
    rIAOfBankSaving: '银行存款',
    rIAOfStock: '股票',
    rIAOfOther: '其他',
  };
  if (isQDIIFund) { // QDII
    assetTypeMap = {
      10020: '股票',
      10089: '现金',
      rIAOfOther: '其他',
    };
  }
  return assetTypeMap[assetType] || '--';
}

// 获取基金特色数据名称
export function getFundSpecialDataName(dataKey) {
  const dataKeyMap = {
    returnSD: '近一年波动率',
    maxDrawd: '近一年最大回撤',
    sharpeRatio: '近一年夏普比率'
  };
  return dataKeyMap[dataKey] || '--';
}

// 以逗号格式化货币
export function numberComma(source, length = 3) {
  if (source === null || typeof source === 'undefined') {
    return '--';
  }
  source = String(source).split('.');
  source[0] = source[0].replace(new RegExp(`(\\d)(?=(\\d{${length}})+$)`, 'ig'), '$1,');
  return source.join('.');
}

// 收益数据带样式
export function yieldFormat(value, fixed = 2) {
  if (value === null || typeof value === 'undefined') {
    return '--';
  }
  let number = parseFloat(value);
  if (fixed) {
    number = fixedNumber(number, fixed);
  }
  const unit = value.match(/%/);
  const value2 = numberComma(number) + (unit ? '%' : '');
  if (parseFloat(number) > 0) {
    return `<span class="rise">+${value2}</span>`;
  }

  if (parseFloat(number) < 0) {
    return `<span class="drop">${value2}</span>`;
  }
  return `${value2}`;
}

// 账号隐藏**，length保留位数
export function numHidden(num, length = 4, hideLen = 4) {
  if (num === null || typeof num === 'undefined') {
    return '--';
  }
  let hideStr = '';
  for (let i = 0; i < hideLen; i++) {
    hideStr += '*';
  }
  num = num.replace(new RegExp(`(.*?)*([_0-9a-zA-Z\u4e00-\u9fa5]{${length}})$`), `${hideStr}$2`);
  return num;
}